package com.deco.service.product;

import com.deco.domain.vo.product.PartsCategoryVo;
import com.deco.domain.vo.product.PartsInfoVo;
import com.deco.logic.product.PartsCategoryLogic;
import com.deco.logic.product.PartsInfoLogic;
import com.deco.service.CommonService;
import com.free.common.vo.PageResponseVo;
import com.free.common.vo.PageSearchVo;
import com.free.common.vo.ResultModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

@Service
public class PartsCategoryService extends CommonService {
	   /*========================================================================*
     *                         Public Fields (公共属性)
     *========================================================================*/

    /*========================================================================*
     *                         Private Fields (私有属性)
     *========================================================================*/
    
    @Autowired
    private PartsCategoryLogic partsCategoryLogic;

	@Autowired
    private PartsInfoLogic partsInfoLogic;
    /*========================================================================*
     *                         Construct Methods (构造方法)
     *========================================================================*/

    /*========================================================================*
     *                         Public Methods (公有方法)
     *========================================================================*/

    
    public PartsCategoryVo getPartsCategory(int id){
    	return partsCategoryLogic.getPartsCategoryVo(id);
    }
    
    public ResultModel save(PartsCategoryVo partsCategoryVo){
    	Date current = new Date();
		int currentUserId = getCurrentUserId();
    	if(partsCategoryVo.getId() == null || partsCategoryVo.getId() == 0){
    		partsCategoryVo.setCreateBy(currentUserId);
    		partsCategoryVo.setCreateTime(current);
    		partsCategoryVo.setUpdateBy(currentUserId);
    		partsCategoryVo.setUpdateTime(current);
    		partsCategoryLogic.create(partsCategoryVo);
    	}
    	else{
    		partsCategoryVo.setUpdateBy(currentUserId);
    		partsCategoryVo.setUpdateTime(current);
    		partsCategoryLogic.update(partsCategoryVo);
    	}
    	return ResultModel.success();
    }

	public ResultModel delete(int id) {
		partsCategoryLogic.delete(id);
	  	return ResultModel.success();
	}

	public PageResponseVo<PartsCategoryVo> pageInfo(
			PageSearchVo<PartsCategoryVo> condition) {
		return partsCategoryLogic.getPageInfo(condition);
	}

	public ResultModel batchDelete(Integer[] ids) {
		if(ids == null || ids.length == 0){
    		return ResultModel.success();
		}
    	int res = partsCategoryLogic.batchDelete(ids);
    	if(res > 0){
    		return ResultModel.success();
		}
		return ResultModel.failure();
	}

	public List<PartsCategoryVo> getAll() {
		return partsCategoryLogic.getAll();
	}

	public List<PartsCategoryVo> selectList(PartsCategoryVo vo, String orderBy){
		return partsCategoryLogic.getList(vo, orderBy);
	}

	public List<PartsCategoryVo> selectAllEnbaleCategorysDirect(PartsCategoryVo categoryVo){
		List<PartsCategoryVo> enableLst = partsCategoryLogic.selectPartsCategoryForFront(categoryVo);
		return enableLst;
	}


	public List<PartsCategoryVo> selectAllEnableCategorys(){
		List<PartsCategoryVo> enableLst = partsCategoryLogic.selectAllEnableCategorys();
		if(enableLst == null){
			return new ArrayList<>();
		}
		enableLst.forEach(x->{
			List<PartsInfoVo> partsInfo = partsInfoLogic.partsInfoForMenus(x.getId());
			x.setParts(partsInfo);
		});
		return enableLst;
	}

	public List<PartsCategoryVo> selectListByConditionForFront(PartsCategoryVo categoryVo){
        List<PartsCategoryVo> enableLst = partsCategoryLogic.selectPartsCategoryForFront(categoryVo);
        if(enableLst == null){
            return new ArrayList<>();
        }
        enableLst.forEach(x->{
            x.setActive(0);
        	List<PartsInfoVo> partsInfo = partsInfoLogic.partsInfoForMenus(x.getId());
        	if(partsInfo != null){
        		partsInfo.forEach(y->{
        			y.setActive(0);
				});
			}
            x.setParts(partsInfo);
        });
        return enableLst;
    }

    /*========================================================================*
     *                         Private Methods (私有方法)
     *========================================================================*/

}
